package com.cskaoyan.javase.object.finalize6;

/**
 * @description: finalize方法
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * - finalize()方法是典型的Java拿来C++机制想要使用，但是失败的案例
 *   - C++析构函数是指对象在销毁前自动执行的方法，是为了给对象的销毁做最后的收尾工作
 *   - 比如释放系统资源（这里显然C++胜出）
 * - 但是Java的垃圾回收机制不是手动的，而是自动的。对象的销毁，垃圾回收具有不确定性
 * - 而只有在真正要销毁（new出来的）对象之前才会调用finalize()方法
 * - 所以使用finalize()给对象销毁做”善后“操作，也是不确定的，不安全的，低效率的
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        new Student(); //该对象没有引用，应该被回收，但是这个不是即时的，而是不确定的。于是连带的finalize方法的执行也具有不确定性

        //通知jvm垃圾回收
        System.gc();
    }
}
class Student{

    //重写finalize方法
    @Override
    protected void finalize() throws Throwable {
        //自己手动释放 该对象获取的非Java系统资源
        //写代码 调用方法
        System.out.println("模拟释放资源");
    }
}
